package com.example.controller;

import com.example.model.dto.CartDTO;
import com.example.model.dto.Result;
import com.example.model.dto.UpdateCartDTO;
import com.example.service.ICartService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * @program: backend
 * @author: zk
 * @create: 2023-04-22 13:25
 **/
@Slf4j
@RestController
@RequestMapping("/carts")
@Api(tags = "购物车信息管理")
public class CartController {
    @Resource
    private ICartService cartService;

    /**
     * 获取用户的购物车信息
     *
     * @return
     */
    @GetMapping
    @ApiOperation("获取用户的购物车信息")
    private Result getCarts(HttpServletRequest request) {
        return cartService.getCarts(request);
    }

    /**
     * 向购物车中添加/更新商品
     *
     * @param cartDTO
     * @return
     */
    @ApiOperation("向购物车中添加/更新商品")
    @PostMapping
    private Result addCarts(@RequestBody CartDTO cartDTO,HttpServletRequest request) {
        return cartService.addCart(cartDTO,request);
    }

    /**
     * 更新购物车中指定商品数量
     * @param updateCartDTO
     * @return
     */
    @ApiOperation("更新购物车中指定商品到指定数量数量")
    @PutMapping
    private Result updateCarts(@RequestBody UpdateCartDTO updateCartDTO,HttpServletRequest request) {
        return cartService.updateCart(updateCartDTO,request);
    }

    /**
     * 删除购物车中的某个商品
     *
     * @param productId
     * @return
     */
    @ApiOperation("删除购物车中的某个商品")
    @DeleteMapping("{productId}")
    private Result deleteCarts(@PathVariable("productId") Long productId,HttpServletRequest request) {
        return cartService.deleteCart(productId,request);
    }

    /**
     * 选中购物车中的所有商品
     *
     * @return
     */
    @ApiOperation("选中购物车中的所有商品")
    @PutMapping("/selectAll")
    private Result selectAll(HttpServletRequest request) {
        return cartService.selectAll(request);
    }

    /**
     * 取消选中购物车中的所有商品
     *
     * @return
     */
    @ApiOperation("取消选中购物车中的所有商品")
    @PutMapping("/unSelectAll")
    private Result unSelectAll(HttpServletRequest request) {
        return cartService.unSelectAll(request);
    }

    /**
     * 计算购物车中所有商品的数量
     *
     * @return
     */
    @ApiOperation("计算购物车中所有商品的数量")
    @GetMapping("/products/sum")
    private Result getProductCount(HttpServletRequest request) {
        return cartService.getProductCount(request);
    }


}
